Dino Geek, intenta ayudarte

¿Cómo funciona la función `yield` en PHP?


La función `yield` en PHP se utiliza para implementar generadores, que son una manera de crear iteradores simples sin la necesidad de construir una clase que implemente la interfaz `Iterator`. Un generador proporciona una forma de iterar sobre un conjunto de datos sin necesidad de cargar todas las estructuras de datos en memoria al mismo tiempo. Esto puede ser especialmente útil cuando se trabaja con grandes datasets o flujos de datos que se generan sobre la marcha.

Para entender mejor cómo funciona `yield`, podemos comparar su comportamiento con una función que devuelve un array y una función que usa `yield`. Considere el siguiente ejemplo sin `yield`:

```php
function getNumbers() { $numbers = []; for ($i = 1; $i <= 5; $i++) { array_push($numbers, $i); } return $numbers;
}

foreach (getNumbers() as $number) { echo $number, ‘ ‘;
}
```

En este caso, se crea un array con todos los números antes de devolverlo, lo que puede ser ineficiente para grandes datasets. Ahora vamos a reescribir esta función usando `yield`:

```php
function getNumbers() { for ($i = 1; $i <= 5; $i++) { yield $i; }
}

foreach (getNumbers() as $number) { echo $number, ‘ ‘;
}
```

Con `yield`, los valores se producen uno a uno, y el estado de la función se mantiene entre cada llamada. Esto significa que la función `getNumbers` produce el primer valor (`1`), y se detiene en `yield` hasta que el siguiente valor es solicitado por el loop. Esto reduce la necesidad de memoria ya que no se almacena el array completo en memoria.

  1. Ejemplo más avanzado

Consideremos un ejemplo un poco más avanzado para comprender cómo podemos usar `yield` para trabajar con archivos grandes sin cargar todo el contenido en memoria:

```php
function getLines($file) { $handle = fopen($file, ‘r’); if ($handle) { while (($line = fgets($handle)) !== false) { yield $line; } fclose($handle); }
}

// Uso del generador para trabajar con el archivo
foreach (getLines(‘example.txt’) as $line) { echo $line;
}
```

En este ejemplo, `getLines` lee un archivo línea a línea, produciendo una línea cada vez que se itera sobre el generador. Esto es mucho más eficiente en términos de memoria para archivos grandes porque no se carga todo el contenido del archivo en memoria de una vez.

  1. Recursos y referencias

1. Documentación oficial de PHP sobre Generadores: La documentación oficial de PHP proporciona una explicación detallada y ejemplos sobre cómo funciona `yield` y los generadores en PHP. [Documentación de PHP](https://www.php.net/manual/es/language.generators.php).
2. Libro “PHP 7 Programming Cookbook” por Doug Bierer: Este libro cubre varios aspectos del uso de PHP 7, incluidos los generadores y cómo pueden ser utilizados para mejorar el rendimiento y eficiencia del código.
3. Coding Standards and Best Practices: Diferentes artículos y blogs, como los provistos por [PHP The Right Way](https://phptherightway.com/), también proporcionan recursos de cómo usar generadores de manera eficiente y segura en proyectos PHP.

En resumen, `yield` en PHP permite crear generadores que pueden producir valores uno a uno y mantener el estado entre cada valor producido. Esto es ideal para trabajar con grandes conjuntos de datos o streams, proporcionando beneficios significativos en términos de uso de memoria y eficiencia general del código.


Genera artículos simplemente para optimizar tu SEO
Genera artículos simplemente para optimizar tu SEO





DinoGeek ofrece artículos sencillos sobre tecnologías complejas

¿Desea ser citado en este artículo? Es muy sencillo, contáctenos en dino@eiki.fr.

CSS | NodeJS | DNS | DMARC | MAPI | NNTP | htaccess | PHP | HTTPS | Drupal | WEB3 | LLM | Wordpress | TLD | Nombre de dominio | IMAP | TCP | NFT | MariaDB | FTP | Zigbee | NMAP | SNMP | SEO | E-Mail | LXC | HTTP | MangoDB | SFTP | RAG | SSH | HTML | ChatGPT API | OSPF | JavaScript | Docker | OpenVZ | ChatGPT | VPS | ZIMBRA | SPF | UDP | Joomla | IPV6 | BGP | Django | Reactjs | DKIM | VMWare | RSYNC | Python | TFTP | Webdav | FAAS | Apache | IPV4 | LDAP | POP3 | SMTP

| Whispers of love (API) | Déclaration d'Amour |






Aviso legal / Condiciones generales de uso